import os
import subprocess
from src.globle import *
from fuc_download.download_files import *
from ..fuc_system.sys_messages import system_info

# 2.1 系统激活相关问题

def sys_act():
    print_head(head=[
        ".......................系统激活相关报错及相关功能.........................."
    ])
    print_menu_options(menu_options=[
        "修复激活时提示无效序列号--下载对应系统版本的kyinfo文件",
        "修复激活时提示无法获取硬件信息错误码0017问题",
        "命令交互式激活操作系统",
        "查看系统相关信息(版本、序列号、注册码、激活码)"
    ])
    error0017 = "sudo rm -rf /etc/.kyhwid && sudo kylin_activation_check"
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': acts_download,
        '2': lambda: subprocess.run(error0017, shell=True,  capture_output=True, text=True).stdout.strip(),
        '3': lambda: subprocess.run(["sudo", "kylin_system_verify"], capture_output=True, text=True).stdout.strip(),
        '4': system_info
    })
# 2.1.1 下载各类kyinfo文件
def acts_download():
    print_head(head=[
        ".......................先看看电脑时间对不对，对的话继续.........................."
    ])
    print_menu_options(menu_options=[
        "安装V10-0710版本",
        "安装V10-1026版本",
        "安装V10-0710-2版本",
        "安装V10-1026-2版本",
        "安装V10-2107版本",
        "安装V10-2203版本",
        "安装V10SP1-2107版本",
        "安装V10SP1-2203版本",
        "安装V10SP1-2303版本"
    ])
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': lambda: download_file('act_v10_0710','act_zip'),
        '2': lambda: download_file('act_v10_1026','act_zip'),
        '3': lambda: download_file('act_v10_0710_2','act_zip'),
        '4': lambda: download_file('act_v10_1026_2','act_zip'),
        '5': lambda: download_file('act_v10_2107','act_zip'),
        '6': lambda: download_file('act_v10_2203','act_zip'),
        '7': lambda: download_file('act_v10sp1_2107','act_zip'),
        '8': lambda: download_file('act_v10sp1_2203','act_zip'),
        '9': lambda: download_file('act_v10sp1_2303','act_zip')
    })
    
# 2.2 桌面任务栏、图标、黑屏、控制面板打不开等相关问题

def clean_sys():
    os.system('apt clean && apt autoclean && apt autoremove && '),
    os.system("dpkg -l | grep '^rc' | awk '{print $2}' | xargs sudo dpkg --purge")
    os.system('sudo rm -rf /tmp/*')
def clean_soft():
    os.system('dpkg -P upstart firefox && apt install aptitude')
    os.system("dpkg -l | grep '^rc' | awk '{print $2}' | xargs sudo aptitude install -y")
def cannot_shutdown():
    os.system("""sed -i  "/keyring/s/^\(.*\)$/#&/g" /etc/pam.d/lightdm""")
    os.system("""sed -i  "/kwallet/s/^\(.*\)$/#&/g" /etc/pam.d/lightdm""")
    os.system("""sed -i  "/keyring/s/^\(.*\)$/#&/g" /etc/pam.d/lightdm-greeter""")
    os.system("""sed -i  "/kwallet/s/^\(.*\)$/#&/g" /etc/pam.d/lightdm-greeter""")

def desk_top():
    print_head(head=[
        ".....................桌面任务栏、图标、黑屏、控制面板打不开等相关问题...................."
    ])
    print_menu_options(menu_options=[
        "尝试修复系统任务栏消失---修改分辨率后仍旧不出现",
        "桌面右下角不显示小键盘图标，且调不出输入法",
        "开机后桌面图标无显示，或显示正在启动caja，只有任务栏",
        "开机进tty1--黑屏(命令行),不进桌面",
        "桌面密钥环清除",
        "输入密码进不去桌面，跳回登录页面（原因之一：磁盘数据满，尝试清除部分数据）---此功能同清理垃圾--清理垃圾时注意在系统无问题时清理",
        "V10非SP1提示面板载入问题，任务栏显示有问题,执行完重启如果还报错执行8",
        "控制面板打不开,如果还报错执行9",
        "重装卸载残留的文件--注意重要文件要做备份，适用于安装或卸载软件导致系统出问题",
        "关机卡麒麟软件四个字---特定情况出现：如安装身份鉴别等软件出现问题--lightdm报错缺pam_gnome_keyring.so\pam_kwallet.so\pam_kwallet.so错误"
    ])
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': lambda: os.system('cd /home/{local_user}/ && rm -rf .cache/ .config/ .Xauthority'),
        '2': lambda: os.system('cd /home/{local_user}/ && rm -rf .config/ && systemctl restart lightdm'),
        '3': lambda: os.system('cd /home/{local_user}/ && apt update && rm -rf .config/ && apt install caja --reinstall'),
        '4': lambda: os.system('cd /home/{local_user}/ && apt update && apt install caja --reinstall &&apt install lightdm --reinstall && dpkg-reconfigure lightdm && systemctl enable lightdm'),
        '5': lambda: os.system('apt install seahorse -y && seahorse'),
        '6': clean_sys,
        '7': lambda: os.system('sudo apt install mate-indicators --reinstall'),
        '8': lambda: os.system('apt install kylin-control-center --reinstall && kylin-control-center'),
        '9': clean_soft,
        '10': cannot_shutdown
    })

# 2.3 没有bashrc
def no_bashrc():
    os.system("cd /home/{local_user}")
    os.system("sudo cp /etc/skel/.bashrc ./")
    os.system("sudo chmod 644 .bashrc")
    os.system("touch .bash_profile")
    os.system("echo -e \"if [ -f ~/.bashrc ]; then\n\t. ~/.bashrc\nfi\" >.bash_profile")

# 2.8 系统升级
def update_sys():
    print_head(head=[
        ".....................系统升级-备份重要数据--没啥事儿不要乱升级...................."
        "....................................没测试过，自测.............................."
        "..........................用cat /etc/.kyinfo查看系统版本........................"
        "...................................一步一步升级................................."
    ])
    print_menu_options(menu_options=[
        "V10-2020年的0710等升级到21年的2101",
        "V10-2021年的2101等升级到21年的2107",
        "V10SP1-还没写"
    ])
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': download_file('sys_update_v10_0710','deb'),
        '2': download_file('sys_update_v10_2101','deb')
    })

# 2.9 系统功能如：exfat硬盘支持、触摸板、开机启动、校准时间
def rc_local():
    subprocess.run("""echo -e "\n[Install]\nWantedBy=multi-user.target\n" >> /lib/systemd/system/rc-local.service""", shell=True)
    subprocess.run("""touch /etc/rc.local && chmod 755 /etc/rc.local""", shell=True)
    subprocess.run("""echo -e "#!/bin/bash\n" >> /etc/rc.local""", shell=True)
    os.system('systemctl start rc-local.service')
    os.system('systemctl enable rc-local.service')
    print("接下来可以自己编辑vim /etc/rc.local添加开机启动项了。")
def sys_func():
    print_head(head=[
        ".....................系统功能如：exfat硬盘支持、触摸板、开机启动、校准时间...................."
    ])
    print_menu_options(menu_options=[
        "老版本尝试增加exfat硬盘支持",
        "触摸板滑动方向改为windows一致",
        "增加rc.local",
        "校准时间--若有ntp服务"
    ])
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': lambda: os.system('apt install exfat-fuse exfat-utils'),
        '2': lambda: os.system('synclient VertScrollDelta=-30'),
        '3': rc_local,
        '4': lambda: print("时间校准完毕") if os.system('ntpdate time.windows.com') == 0 else print("时间校准失败")
    })

# 主函数
def system_repair():
    run_sudo_command("su")
    print_head(head=[
        ".......................系统修复.........................."
    ])
    print_menu_options(menu_options=[
        "系统激活相关问题--如激活时不出现二维码等问题",
        "桌面任务栏、图标、黑屏、控制面板打不开等相关问题",
        "ll查看命令不生效--误删.bashrc和.bash_profile文件",
        "在开发盘下尝试fsck修复根目录",
        "在开发盘下挂载固态盘",
        "2203系统，刻录软件续刻时报错",
        "系统升级-备份重要数据--没啥事儿不要乱升级",
        "增加一些系统功能"
    ])
    select_menu(menu_dict={
        '0': return_to_previous_menu,
        '1': sys_act,
        '2': desk_top,
        '3': no_bashrc,
        '4': lambda: os.system("fsck -y /dev/nvme0n1p2"),
        '5': lambda: print("打开文件系统下disk01文件夹查看") if os.system('mkdir -p /disk01 && chmod -R 777 /disk01 && mount /dev/nvme0n1p2 /disk01') == 0 else print("没建好"),
        '6': lambda: download_file('kelu_xuke','deb_zip'),
        '8': update_sys,
        '9': sys_func
    })